package com.parking.order.controller;


import cn.hutool.core.bean.BeanUtil;
import com.parking.common.core.model.PageInfo;
import com.parking.common.core.model.Result;
import com.parking.common.core.util.JwtUtil;
import com.parking.order.model.dto.OvertimeDto;
import com.parking.order.model.form.FindEntranceByOrderNumRentersForm;
import com.parking.order.model.form.FindEntranceByOrderNumUserForm;
import com.parking.order.model.form.FindOvertimeCertifiedForm;
import com.parking.order.model.form.FindOvertimePlatformForm;
import com.parking.order.model.param.FindOvertimeByOrderNumParam;
import com.parking.order.model.param.FindOvertimeParam;
import com.parking.order.service.IOrderOvertimeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 吴彦祖
 * @since 2023年11月28日
 */
@RestController
@Api(tags = "超时订单")
@RequestMapping("/orderOvertime")
public class OrderOvertimeController {
    /**
     * 超时订单服务层
     * */
    @Autowired
    private IOrderOvertimeService orderOvertimeService;

    /**
     * 用户根据订单编号查询超时订单
     * 参数 用户token authorization
     *      订单编号 orderInfoNum
     * 返回  开始时间 startTime
     *      结束时间 endTime
     *      持续小时 enduHour
     *      支付价格 payPrice
     *      支付状态 payState 0未支付 1已支付
     *      支付时间 payTime
     * */
    @ApiOperation("用户根据订单编号查询超时订单")
    @GetMapping("/findOvertimeByOrderNum.user")
    public Result<OvertimeDto> findOvertimeByOrderNumUser(@Valid FindEntranceByOrderNumUserForm form, @RequestHeader String authorization) throws Exception {
        FindOvertimeByOrderNumParam param = BeanUtil.toBean(form, FindOvertimeByOrderNumParam.class);
        param.setUserId(JwtUtil.getUserId(authorization));
        OvertimeDto dto = orderOvertimeService.findOvertimeByOrderNum(param);
        return Result.getResult(OvertimeDto.class).setMessage("平台根据订单编号查询进出场信息成功").setData(dto);
    }

    /**
     * 出租客根据订单编号查询超时订单
     * 参数 出租客token authorization
     *      订单编号 orderInfoNum
     * 返回  开始时间 startTime
     *      结束时间 endTime
     *      持续小时 enduHour
     *      支付价格 payPrice
     *      支付状态 payState 0未支付 1已支付
     *      支付时间 payTime
     * */
    @ApiOperation("出租客根据订单编号查询超时订单")
    @GetMapping("/findOvertimeByOrderNum.renters")
    public Result<OvertimeDto> findOvertimeByOrderNumRenters(@Valid FindEntranceByOrderNumRentersForm form, @RequestHeader String authorization) throws Exception {
        FindOvertimeByOrderNumParam param = BeanUtil.toBean(form, FindOvertimeByOrderNumParam.class);
        param.setRentersId(JwtUtil.getRentersId(authorization));
        OvertimeDto dto = orderOvertimeService.findOvertimeByOrderNum(param);
        return Result.getResult(OvertimeDto.class).setMessage("出租客根据订单编号查询超时订单成功").setData(dto);
    }

    /**
     * 物业分页查询超时订单
     * 参数 页数 pageNum
     *     每页大小 pageSize
     *     订单编号 orderInfoNum
     *     用户信息Id userInfoId
     *     车位信息Id  stallInfoId
     *     支付状态 payState 0未支付 1已支付
     *     开始日期 startDate
     *     结束日期 endDate
     *     物业token authorization
     *
     * 返回 订单编号 orderInfoNum
     *      用户信息Id userInfoId
     *      用户名称 userInfoName
     *      车牌号 userCarPlate
     *      车位信息Id stallInfoId
     *      车位号 stallInfo
     *      开始时间 startTime
     *      结束时间 endTime
     *      支付时间 payTime
     *      持续小时 enduHour
     *      支付状态 payState 未支付 已支付
     *      支付价格 payPrice
     * */
    @ApiOperation("物业分页查询超时订单")
    @GetMapping("/findOvertime.certified")
    public Result<PageInfo> findOvertimeCertified(@Valid FindOvertimeCertifiedForm form, @RequestHeader String authorization) throws Exception {
        FindOvertimeParam param = BeanUtil.toBean(form, FindOvertimeParam.class);
        param.setCertifiedId(JwtUtil.getCertifiedAccountId(authorization));
        PageInfo page = orderOvertimeService.findOvertime(param);
        return Result.getResult(PageInfo.class).setMessage("物业分页查询超时订单成功").setData(page);
    }

    /**
     * 平台分页查询超时订单
     * 参数 页数 pageNum
     *     每页大小 pageSize
     *     订单编号 orderInfoNum
     *     用户信息Id userInfoId
     *     物业信息Id certifiedInfoId
     *     车位信息Id  stallInfoId
     *     支付状态 payState 0未支付 1已支付
     *     开始日期 startDate
     *     结束日期 endDate
     *     平台token authorization
     *
     * 返回 订单编号 orderInfoNum
     *      用户信息Id userInfoId
     *      用户名称 userInfoName
     *      车牌号 userCarPlate
     *      车位信息Id stallInfoId
     *      车位号 stallInfo
     *      物业信息Id certifiedInfoId
     *      物业名称 certifiedInfoName
     *      开始时间 startTime
     *      结束时间 endTime
     *      支付时间 payTime
     *      持续小时 enduHour
     *      支付状态 payState 未支付 已支付
     *      支付价格 payPrice
     * */
    @ApiOperation("平台分页查询超时订单")
    @GetMapping("/findOvertime.platform")
    public Result<PageInfo> findOvertimePlatform(@Valid FindOvertimePlatformForm form, @RequestHeader String authorization) throws Exception {
        FindOvertimeParam param = BeanUtil.toBean(form, FindOvertimeParam.class);
        param.setPlatformId(JwtUtil.getPlatformId(authorization));
        PageInfo page = orderOvertimeService.findOvertime(param);
        return Result.getResult(PageInfo.class).setMessage("平台分页查询超时订单成功").setData(page);
    }
}

